--- /dev/null
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+/* exported NotificationDaemon */
+
+const { Gio, GLib } = imports.gi;
+
+const { loadInterfaceXML } = imports.misc.fileUtils;
+const { ServiceImplementation } = imports.dbusService;
+
+const NotificationsIface = loadInterfaceXML('org.freedesktop.Notifications');
+const NotificationsProxy = Gio.DBusProxy.makeProxyWrapper(NotificationsIface);
+
+var NotificationDaemon = class extends ServiceImplementation {
+ constructor() {
+ super(NotificationsIface, '/org/freedesktop/Notifications');
+
+ this._autoShutdown = false;
+
+ this._proxy = new NotificationsProxy(Gio.DBus.session,
+ 'org.gnome.Shell',
+ '/org/freedesktop/Notifications',
+ (proxy, error) => {
+ if (error)
+ log(error.message);
+ });
+
+ this._proxy.connectSignal('ActionInvoked',
+ (proxy, sender, params) => {
+ this._dbusImpl.emit_signal('ActionInvoked',
+ new GLib.Variant('(us)', params));
+ });
+ this._proxy.connectSignal('NotificationClosed',
+ (proxy, sender, params) => {
+ this._dbusImpl.emit_signal('NotificationClosed',
+ new GLib.Variant('(uu)', params));
+ });
+ }
+
+ register() {
+ Gio.DBus.session.own_name(
+ 'org.freedesktop.Notifications',
+ Gio.BusNameOwnerFlags.REPLACE,
+ null, null);
+ }
+
+ NotifyAsync(params, invocation) {
+ this._proxy.NotifyRemote(...params, (res, error) => {
+ if (this._handleError(invocation, error))
+ return;
+
+ invocation.return_value(new GLib.Variant('(u)', res));
+ });
+ }
+
+ CloseNotificationAsync(params, invocation) {
+ this._proxy.CloseNotificationRemote(...params, (res, error) => {
+ if (this._handleError(invocation, error))
+ return;
+
+ invocation.return_value(null);
+ });
+ }
+
+ GetCapabilitiesAsync(params, invocation) {
+ this._proxy.GetCapabilitiesRemote(...params, (res, error) => {
+ if (this._handleError(invocation, error))
+ return;
+
+ invocation.return_value(new GLib.Variant('(as)', res));
+ });
+ }
+
+ GetServerInformationAsync(params, invocation) {
+ this._proxy.GetServerInformationRemote(...params, (res, error) => {
+ if (this._handleError(invocation, error))
+ return;
+
+ invocation.return_value(new GLib.Variant('(ssss)', res));
+ });
+ }
+};